home *** CD-ROM | disk | FTP | other *** search
/ Amiga News 95 / Amiga News 95.iso / dpat / dpat11 / aush / aush.doc < prev    next >
Encoding:
Text File  |  1992-08-21  |  38.6 KB  |  859 lines

  1.  
  2.                AUSH - Manuel de référence
  3.  
  4.  
  5.  
  6.  
  7.  
  8.   1. Avertissement
  9.  
  10.       Ce manuel décrit la version  1.50  de  l'interpréteur  de  commandes
  11.   AUSH. Ce programme est placé dans le domaine public, avec autorisation de le
  12.   copier librement et de le diffuser par n'importe quels moyens,  à  condition
  13.   que  le  produit  soit  diffusé  dans  son  intégralité,  et     sans    aucune
  14.   modification.  AUSH  est  (c)1992  par  Denis  GOUNELLE,  toute  utilisation
  15.   commerciale  ou  vente  de  ce  programme  sans  autorisation   écrite   est
  16.   STRICTEMENT INTERDITE.
  17.       Malgré de nombreux tests, je ne peux garantir  qu'AUSH  ne  contient
  18.   aucune erreur. VOUS UTILISEZ CE PROGRAMME A VOS RISQUES  ET  PERILS.    Je  ne
  19.   pourrai en aucun cas être  tenu  responsable    de  tout  dommage,  direct  ou
  20.   indirect, résultant de l'utilisation d'AUSH.
  21.  
  22.   2. Introduction
  23.  
  24.       AUSH (Amiga Ultimate SHell) est  un  interpréteur  de  commande  (ou
  25.   "shell") écrit pour l'Amiga, et destiné à remplacer entièrement le shell  de
  26.   Commodore. Il s'inspire de tous les shells que j'ai utilisé jusqu'ici, aussi
  27.   bien sous UNIX (sh, csh, et surtout tcsh 6.00.03) que sur Amiga (AShell  1.3
  28.   et Csh 4.01A), tout en intégrant de  nombreuses  idées  personnelles    et  en
  29.   gardant la plus grande compatibilité possible avec les shells  Commodore  et
  30.   ARP.
  31.  
  32.       Vous êtes invités à me donner votre avis (critiques et  suggestions)
  33.   sur ce programme, en m'écrivant à l'adresse suivante :
  34.  
  35.                    M. GOUNELLE Denis
  36.                     Boite 71
  37.                   6, rue des cailloux
  38.                  92110 CLICHY - FRANCE
  39.  
  40.       L'éditeur de ligne de commande a été écrit à partir de celui de  Csh
  41.   v4.02A (par Mattew DILLON/Steve DREW/Carlo BORREO & Cesare DIENI).
  42.       Merci à Pierre ARDICHVILI, Jean-Yves PROUX, Jean-Philippe  RAPP,  et
  43.   Michel SCHINZ pour leurs tests et leurs suggestions. Merci également à Josef
  44.   EGLOFF pour la traduction des messages d'erreur en allemand.
  45.  
  46.   3. Installation
  47.  
  48.       Si votre Amiga dispose du système 1.3, vous devez d'abord  installer
  49.   la librairie ARP, si ce n'est déjà fait, en copiant le fichier "arp.library"
  50.   dans le répertoire "LIBS:".
  51.       Copiez ensuite les fichiers "AUSH" (le shell lui-même) et  "NewAUSH"
  52.   (commande pour lancer un nouveau shell) dans le répertoire "C:".  Notez  que
  53.   AUSH et NewAUSH sont écrits en code ré-entrant, et peuvent donc parfaitement
  54.   être rendus résidents.
  55.  
  56.   4. La commande NewAUSH
  57.  
  58.       Cette commande est l'équivalent des commandes "NewCLI" et "NewShell"
  59.   du shell de Commodore. Elle ne fonctionnera que si le  programme  "AUSH"  se
  60.   trouve dans le chemin d'accès défini par la commande "Path". Pour lancer  un
  61.   nouveau shell, depuis la ligne de commande, tapez :
  62.  
  63.                NewAUSH [spécification de fenêtre]
  64.  
  65.             exemple : NewAUSH CON:0/11/640/180/AUSH
  66.  
  67.       Pour lancer un nouveau shell depuis le WorkBench, créez une icône de
  68.   type "Project". Indiquez éventuellement une taille de pile  (champ  "STACK")
  69.   et  une  spécification  de  fenêtre  (champ  "TOOL  TYPE",  sous  la   forme
  70.   "WINDOW=spécification"). N'oubliez pas de mettre le chemin d'accès à NewAUSH
  71.   dans le champ "DEFAULT TOOL".
  72.  
  73.   5. Notions de base
  74.  
  75.       Lorsque vous    lancez    AUSH,  un  message  indiquant  la  version  du
  76.   programme apparait, suivit d'une chaine d'invite (ou "prompt"). Par  défaut,
  77.   cette chaine indique le numéro du shell, suivit du  répertoire  courant.  Le
  78.   shell attend alors vos commandes.
  79.  
  80.       Une commande simple  est  une  suite    de  mots  séparés  par    un  ou
  81.   plusieurs espaces. Le premier mot indique la commande  à  exécuter,  et  les
  82.   autres sont les arguments à passer à cette commande.    La  longueur  maximale
  83.   d'une ligne de commande est de 256 caractères dans  le  cas  d'une  commande
  84.   externe.
  85.       Si  le  premier  mot    correspond  à  un   alias,   la   substitution
  86.   correspondante est effectuée. Cela continue tant que c'est possible, ce  qui
  87.   veut dire qu'un alias  peut  être  défini  en  fonction  d'un  autre.  Notez
  88.   cependant qu'il n'y a pas de contrôle de récursivité des  définitions.  Vous
  89.   pouvez désactiver la substitution des alias en  ajoutant  le    caractère  "\"
  90.   devant le nom de la commande (par exemple "\ls df0:")
  91.       AUSH examine également les arguments, et remplace  certains  d'entre
  92.   eux en fonction des règles suivantes :
  93.  
  94.       ;       tout ce qui suit est un commentaire, et est ignoré.
  95.       ^car      remplacé par "CTRL-car" si "car"  est  une  lettre,  par
  96.           "car" sinon.
  97.       =n      remplacé par le  n-ième  répertoire  dans  la  pile  des
  98.           répertoires.
  99.       $var      remplacé par la valeur de la    variable  "var"  (cherchée
  100.           d'abord  dans  les  variables  locales,  puis  dans  les
  101.           variables  globales,    et  enfin   dans   les     variables
  102.           ARP/Commodore et Manx) ou par une chaine vide  si  cette
  103.           variable n'est pas définie.
  104.       pattern      remplacé par le nom de tous les fichiers  correspondant.
  105.           Une "pattern" est un  mot  contenant  au  moins  un  des
  106.           méta-caractères ARP, dont la syntaxe est :
  107.  
  108.           ?          n'importe quel caractère
  109.           #c          n'importe quel nombre de fois (même zéro)
  110.                   le caractère c
  111.           #? ou *     n'importe quelle chaine, même vide
  112.           [liste]     n'importe lequel des caractères indiqués
  113.           (exp1|exp2) exp1 ou exp2
  114.           ~exp          tout sauf exp
  115.  
  116.       {expr}      remplacé par la valeur de l'expression (voir la  syntaxe
  117.           plus loin).
  118.       !!      remplacé par la dernière commande dans l'historique.
  119.       !n      remplacé par la commande numéro "n" dans l'historique.
  120.       !chaine      remplacé par la dernière commande commençant par
  121.           "chaine" dans l'historique.
  122.       `cmd`       remplacé par la première ligne produite en sortie par la
  123.           commande indiquée. Les espaces  en  tête  sont  éliminés
  124.           avant remplacement, la ligne est considéré comme un seul
  125.           argument et n'est pas ré-interprété.
  126.           Exemple : la commande "set toto `type config`" copie  le
  127.           contenu de la première ligne du fichier "config" dans la
  128.           variable locale "toto".
  129.       \car      copie le caractère indiqué sans l'interpréter.
  130.       'chaine'    copie la chaine sans interprétation (à part de la  forme
  131.           "\car").
  132.       "chaine"    copie la chaine sans interprétation, à part  des  formes
  133.           "^car", "=n",  "$var",  "{expr}"  et  "\car".  De  plus,
  134.           l'extension des "patterns" n'est pas désactivée.
  135.  
  136.       AUSH est également capable de rediriger l'entrée ou la sortie  d'une
  137.   commande : au lieu de se faire sur la fenêtre courante, elle se fera sur  le
  138.   fichier indiqué. La syntaxe à respecter est la suivante :
  139.  
  140.       >nom      redirection de la  sortie  vers  le  fichier    "nom".  Le
  141.           fichier est écrasé s'il existe déjà, créé sinon.
  142.       >>nom      redirection de la  sortie  vers  le  fichier    "nom".  La
  143.           sortie est ajoutée à la  fin    du  fichier  s'il  existe,
  144.           sinon le fichier est créé.
  145.       <nom      redirection de l'entrée depuis le fichier "nom".
  146.  
  147.       La spécification de ces redirections peut se faire n'importe où  sur
  148.   la ligne de commande. Il peut y avoir un  ou    plusieurs  espaces  entre  les
  149.   caractères  de  redirection  et  le  nom  de    fichier  (comme  par   exemple
  150.   "list > maliste").
  151.  
  152.       Une commande complexe est composée d'au moins deux commandes simples
  153.   enchainées par une des formes suivantes :
  154.  
  155.       cmd1|cmd2|...   exécution  successive  de  commandes  simples,  avec
  156.               "pipes" (la  sortie  de  la  commande  à  gauche  du
  157.               caractère "|"  est  utilisée  comme  entrée  par  la
  158.               commande indiquée à droite), tant que le code retour
  159.               est nul.
  160.       cmd1,cmd2,...   exécution successive de commandes, tant que le  code
  161.               retour est nul. Vous pouvez spécifier des  commandes
  162.               simples, mais aussi des enchainements par pipes (par
  163.               exemple "cd ram: , list | wc , delete toto").
  164.  
  165.       Le code retour d'une commande complexe  est  celui  de  la  dernière
  166.   commande simple exécutée. Seule la dernière commande simple  d'une  commande
  167.   complexe peut être lancée en arrière plan.
  168.  
  169.       Une fois l'analyse de la ligne  de  commande  terminée,  AUSH  lance
  170.   l'exécution de la commande correspondante. La recherche se fait d'abord dans
  171.   la liste des commandes internes au shell, puis dans la liste    des  commandes
  172.   résidentes, et enfin dans les répertoires  indiqués  à  l'aide  la  commande
  173.   "Path". Une fois la commande lancée, AUSH attend la fin  de  son  exécution,
  174.   met à jour certaines variables (comme celle indiquant le code retour  de  la
  175.   dernière commande exécutée) puis affiche de nouveau la chaine d'invite.
  176.       Vous pouvez demander une exécution en arrière plan, c'est-à-dire que
  177.   AUSH n'attendra pas la fin de la commande. Il vous faudra alors spécifier le
  178.   caractère "&" sur la ligne de commande (par exemple "list >maliste  &").  Le
  179.   shell affichera alors le numéro de  processus  de  cette  commande  puis  le
  180.   prompt ré-apparaitra immédiatement.
  181.       Par défaut, les commandes héritent de la  priorité  du  shell,  mais
  182.   AUSH vous permet de modifier temporairement cette priorité. Ainsi,  si  vous
  183.   tapez une ligne de la forme "cmd @n", la  commande  indiquée  sera  exécutée
  184.   avec la priorité "n" (par exemple "list @-3" lancera la commande "list" avec
  185.   la priorité -3). Ceci ne marchera cependant pas pour les commandes internes.
  186.   De même, lors du lancement en arrière plan,  vous  pouvez  faire  suivre  le
  187.   caractère "&" par la priorité à donner à la  commande.  Par  exemple,  "list
  188.   >maliste &5" lancera la commande "list" en arrière plan, avec la priorité 5.
  189.       Notez que les spécifications    "&"  et  "@"  peuvent  être  indiquées
  190.   n'importe où sur la ligne de commande.
  191.  
  192.   6. Les variables
  193.  
  194.       AUSH vous permet de définir des variables, comme dans un langage  de
  195.   programmation classique. Les caractères autorisés pour les noms de variables
  196.   sont les lettres minuscules et majuscules, les  chiffres,  et  le  caractère
  197.   souligné.  Notez   que   minuscules    et   majuscules   sont     différenciées
  198.   (contrairement  aux  noms  de  fichiers).  Ces  variables  peuvent  contenir
  199.   n'importe quelle valeur, aussi bien numérique que alphanumérique.
  200.       Les  variables  globales  sont  accessibles  à  tous     les   niveaux
  201.   d'exécution, c'est-à-dire  aussi  bien  en  mode  interactif  que  dans  les
  202.   fichiers de commandes. Elles ne  peuvent  être  détruites.  Notez  qu'il  ne
  203.   s'agit pas des variables au  sens  ARP  ou  Commodore.  Elles  ne  sont  pas
  204.   partagées par plusieurs shells.
  205.       Une variables locale n'est accessible que dans le niveau d'exécution
  206.   où elle a été définie pour la  première  fois.  Lors    du  retour  au    niveau
  207.   précédent, les variables locales sont détruites automatiquement.
  208.       Certaines variables permettent de contrôler et de  paramètrer  AUSH.
  209.   Ces variables sont décrites plus loin.
  210.  
  211.   7. Expressions
  212.  
  213.       AUSH peut évaluer des expressions entières,  exprimées  en  notation
  214.   polonaise inversée postfixée. Vous pouvez utiliser des variables locales  ou
  215.   globales dans ces expressions, si leurs  valeurs  sont  numériques.  Il  est
  216.   possible d'indiquer des nombres hexadécimaux (précédés par "0x", par exemple
  217.   "0x13e"). Par défaut le résultat est en  décimal.  Les  opérateurs  reconnus
  218.   sont :
  219.  
  220.       +      addition
  221.       -      soustraction
  222.       *      multiplication
  223.       /      division
  224.       %      modulo (reste de la division entière)
  225.       <      décalage à gauche
  226.       >      décalage à droite
  227.       &      et
  228.       |      ou
  229.       sx      dépile le sommet de pile dans le registre x
  230.       lx      empile le contenu du registre x
  231.       HEX      affiche le résultat en hexadécimal
  232.  
  233.       Il y a dix registres (désignés par un chiffre de 0 à 9)  initialisés
  234.   à zéro au  démarrage    du  shell.  Ils  conservent  leur  valeur  entre  deux
  235.   évaluations d'expression. Les nombres et les opérateurs doivent être séparés
  236.   par au moins un espace, sauf le - unaire (négation).
  237.  
  238.   Exemples :
  239.  
  240.       echo { 34 3 / 4 + } => 15
  241.       echo { 7 3 - }      => 4
  242.       echo { 10 -2 + }    => 8
  243.  
  244.       set cpt 3
  245.       echo { $cpt 2 * }   => 6
  246.       set cpt { $cpt 1 + }
  247.       echo $cpt          => 4
  248.  
  249.   8. Les fichiers de commandes
  250.  
  251.       Vous pouvez regrouper plusieurs commandes dans  un  fichier,    et  le
  252.   faire exécuter par AUSH comme un programme quelconque. Tout ce passera alors
  253.   comme si vous aviez tapé cette suite de commandes au clavier, à part sur  le
  254.   plan des variables locales.
  255.       Dans un fichier de commandes, la variable locale "argc"  indique  le
  256.   nombre d'arguments reçus. AUSH  positionne  également  des  pseudo-variables
  257.   locales (elles n'apparaissent pas dans la liste des variables données par la
  258.   commande "set", et ne peuvent être modifiées) : la variable "0" contient  le
  259.   nom du fichier de commandes,    les  variables    "1",  "2",...  les  différents
  260.   arguments, et la variable "*" la liste des  arguments  (à  partir  de  "$1")
  261.   séparés par un espace.
  262.       Chaque  fois    que  vous  lancez  AUSH,  le  fichier    de   commandes
  263.   "S:.aushrc" est exécuté (s'il existe). L'argument optionnel  "FROM  fichier"
  264.   permet d'exécuter le fichier de commandes  indiqué  plutôt  que  le  fichier
  265.   "S:.aushrc".
  266.  
  267.   9. Gestion de l'historique
  268.  
  269.       AUSH peut mémoriser vos commandes, et vous permettre de les rappeler
  270.   par la suite. Le  mécanisme  d'historique,  qui  ne  fonctionne  qu'en  mode
  271.   interactif, est contrôlé par la variable "history" (qui indique le nombre de
  272.   commandes à conserver). La  commande    "history"  (décrite  plus  loin)  vous
  273.   permet de voir le contenu de l'historique.
  274.  
  275.       La variable "savehist" indique le nombre de commandes sauvées  entre
  276.   chaque exécution d'un shell. Ce fichier (généré lors de  la  terminaison  du
  277.   shell) est automatiquement chargé lors du démarrage, et les commandes  qu'il
  278.   contient sont copiées dans l'historique. La variable  "histfile"  peut  être
  279.   définie, pour indiquer le nom  du  fichier  de  sauvegarde.  Par  défaut  ce
  280.   fichier est "S:.history".
  281.  
  282.   10. Edition de la ligne de commandes
  283.  
  284.       Ce mécanisme permet de se passer du gestionnaire de console  NewCON.
  285.   Il est activé en affectant la valeur "1"  à  la  variable  "lineedit".  Vous
  286.   pouvez alors utiliser les  touches  suivantes  pour  éditer  vos  lignes  de
  287.   commande :
  288.  
  289.     gauche         caractère précédent.
  290.     droite         caractère suivant.
  291.     shift-gauche mot précédent.
  292.     shift-droit  mot suivant.
  293.     shift-haut   dernière commande commençant par la ligne courante.
  294.     haut         commande précédente dans l'historique.
  295.     bas         commande suivante dans l'historique.
  296.     ^A         va en début de ligne.
  297.     ^B         caractère précédent.
  298.     ^E         va en fin de ligne.
  299.     ^F         caractère suivant.
  300.     ^K         efface la fin de ligne.
  301.     ^L         ré-affiche la ligne.
  302.     ^N         commande suivante dans l'historique.
  303.     ^P         commande précédente dans l'historique.
  304.     ^S         échange les deux caractères précédents.
  305.     ^T         première commande dans l'historique.
  306.     ^W         efface la fin du mot.
  307.     ^X         efface la ligne.
  308.     ^Z         dernière commande dans l'historique.
  309.     RETURN         exécute la commande, après sauvegarde dans l'historique.
  310.     ESC         annule la commande, après sauvegarde dans l'historique.
  311.  
  312.     ^V         le mot précédent est considéré comme un nom de variable
  313.              et est remplacé par la valeur de cette variable.
  314.              Exemple : echo version<^V> => echo 1.10.
  315.     TAB         complète le nom de fichier ou de variable.
  316.              Exemple :     cd ram:
  317.                  list Cl<TAB>  => list ClipBoards/
  318.                  echo $hi<TAB> => echo $history
  319.              S'il y a plusieurs possibilités, AUSH complète le plus
  320.              loin possible et affiche la liste des possibilités.
  321.              Pour compléter un nom de fichier, AUSH lui ajoute le
  322.              contenu de la variable "filepat" et étend la "pattern"
  323.              ainsi obtenue.
  324.     ^D         affiche la liste des possibilités pour compléter le
  325.              nom de fichier ou de variable (sans modifier la ligne
  326.              de commande).
  327.  
  328.     HELP         appelle la requête de fichier. Si vous choisissez un
  329.              fichier, son nom sera ajouté dans la ligne de commande.
  330.  
  331.     f1 à f10     remplacé par la valeur des variables "f1" à "f10", ou
  332.              "F1" à "F10" si shifté.
  333.  
  334.   Toutes les touches de contrôle peuvent  être    redéfinies,  à    l'aide  de  la
  335.   variable spéciale "keys" (voir plus loin).
  336.  
  337.   IMPORTANT: il arrive de temps  en  temps  que  l'éditeur  se  bloque  et  ne
  338.   réagisse plus à ce que vous tapez au clavier. Dans  ce  cas,    il  suffit  en
  339.   général de taper "|" (SHIFT-\) pour le débloquer.
  340.  
  341.   11. Gestion des répertoires
  342.  
  343.       Si vous définissez l'alias "dircmd", cet alias sera  exécuté  chaque
  344.   fois que vous taperez un nom de  répertoire  comme  nom  de  commande  (sans
  345.   argument, redirection, pipe, ni  lancement  en  arrière-plan).  Par  exemple
  346.   "alias dircmd cd" vous permet d'avoir un "cd" implicite : taper le nom  d'un
  347.   répertoire suffit pour y aller. Vous pouvez également définir un alias  plus
  348.   complexe, comme "alias dircmd 'cd [] , list FILES QUICK'".
  349.  
  350.       AUSH peut gérer une pile de répertoire (64  entrées).  L'ajout  d'un
  351.   répertoire ce fait à l'aide la commande  interne  "pushd",  le  retrait  par
  352.   "popd", et l'affichage du contenu de la pile par "dirs" (ces commandes  sont
  353.   décrites plus loin).
  354.       Vous pouvez utiliser cette pile dans vos  commandes  avec  la  forme
  355.   "=n", où "n" est le numéro d'un répertoire dans  la  pile  (indiqué  par  la
  356.   commande "dirs").
  357.  
  358.   12. Commandes internes
  359.  
  360.       Ce chapitre décrit  toutes  les  commandes  internes    de  AUSH.  Ces
  361.   commandes ne peuvent    être  lancées  en  arrière  plan  mais    acceptent  les
  362.   redirections en entrée et en sortie. Elles retournent 0  (RETURN_OK)  ou  20
  363.   (RETURN_FAIL) suivant le cas.
  364.       Lors de l'affichage de la valeur d'une variable  par  les  commandes
  365.   "setvar" ou "set", les attributs  de  cette  variable  sont  affichés  entre
  366.   parenthèses ("x" pour exportable, "r" pour lecture seulement).
  367.  
  368.       alias
  369.       Affiche la liste des alias et leurs définitions.
  370.  
  371.       alias nom
  372.       Affiche la définition de l'alias indiqué.
  373.  
  374.       alias nom 'chaine'
  375.       Défini un alias "nom" de valeur "chaine".  Dans  la  chaine,  le
  376.       symbole  "[]"  indique  où  placer  les  arguments  lors  de  la
  377.       substitution de l'alias. Notez que la chaine  DOIT  être  placée
  378.       entre quotes simples.
  379.  
  380.       cd [rep]
  381.       Sans argument affiche le nom du répertoire courant, sinon  "rep"
  382.       devient le répertoire courant.
  383.  
  384.       dirs
  385.       Affiche le contenu de la pile des répertoires.
  386.  
  387.       echo [-c] [args...]
  388.       Affiche les arguments sur la sortie standard, suivis d'un retour
  389.       chariot sauf si vous indiquez l'option "-c".
  390.  
  391.       eval
  392.       Passe en mode évaluation : toute ligne en  entrée  est  analysée
  393.       comme une expression (voir syntaxe plus  haut)  et  le  résultat
  394.       affiché. Pour sortir de ce mode, tapez "x"  tout  seul  sur  une
  395.       ligne.
  396.  
  397.       exit [code]
  398.       Retourne au niveau d'exécution précédent, avec  le  code  retour
  399.       indiqué (0 par défaut). En mode interactif, termine le shell.
  400.  
  401.       export vars...
  402.       Marque les variables locales indiquées comme "exportables".  Ces
  403.       variables deviennent alors lisibles, modifiables et détruisibles
  404.       dans    les  fichiers  de  commandes  lancés  depuis   le   niveau
  405.       d'exécution courant.
  406.  
  407.       for var in val1 val2... valn
  408.       ...
  409.       done
  410.       Effectue une    boucle.  La  variable  "var"  (locale)  prend  les
  411.       valeurs indiquées dans  la  liste,  et  pour    chaque    valeur    la
  412.       séquence d'instruction entre le "for" et le "done" est  exécutée
  413.       une fois. Après le "done",  la  variable  contient  la  dernière
  414.       valeur  pour    laquelle  la  boucle  a  été  effectuée.  En  mode
  415.       interactif, le prompt devient  celui    indiqué  par  la  variable
  416.       "prompt3", entre le "for" et le "done".
  417.       Vous pouvez également utiliser la forme  "for  var  in  val1  ..
  418.       val2", qui effectue la boucle pour chaque valeur comprise  entre
  419.       les nombres "val1" et "val2" inclus. Si  le  nombre  "val2"  est
  420.       inférieur au nombre "val1", la boucle est effectué avec  un  pas
  421.       de -1. Les nombres "val1" et "val2" peuvent être négatifs.
  422.  
  423.       history
  424.       Donne la liste des commandes présentes dans l'historique.
  425.  
  426.       if [NOT] condition
  427.       ....
  428.       [else
  429.       ....]
  430.       endif
  431.       Exécution  conditionnelle.  En  mode    "interactif",  la   chaine
  432.       d'invite devient celle indiquée par la variable "prompt2".
  433.       La condition peut être :
  434.  
  435.           -d nom      vrai si "nom" est un répertoire (1)
  436.           -e nom      vrai si "nom" existe (1)
  437.           -f nom      vrai si "nom" est un fichier (1)
  438.           -o nom nom2 vrai si "nom1" et "nom2" existent et que
  439.                   "nom" est plus ancien que "nom2" (1)
  440.           -s nom      vrai si "nom" est un fichier non vide (1)
  441.           str1 = str2 vrai si "str1" est identique à "str2"
  442.           n1 LT n2    vrai si n1 est inférieur n2
  443.           n1 EQ n2    vrai si n1 est égal à n2
  444.           n1 GT n2    vrai si n1 est supérieur n2
  445.           n1 LE n2    vrai si n1 est inférieur ou égal à n2
  446.           n1 NE n2    vrai si n1 est différent de n2
  447.           n1 GE n2    vrai si n1 est supérieur ou égal à n2
  448.  
  449.       Le mot-clé "NOT" avant une  condition  permet  d'inverser  cette
  450.       condition. Jusqu'à 16 commandes "if" peuvent être imbriquées.
  451.  
  452.       (1) Si la lettre après  le  tiret  est  en  majuscule  (exemple:
  453.           "-D"), le test échouera sans requêtes de l'AmigaDOS  en  cas
  454.           de volume absent, lecteur de disquette vide, etc...
  455.  
  456.       jobs
  457.       Affiche la liste des processus lancés en arrière plan.
  458.  
  459.       loadhist
  460.       Force le chargement immédiat du fichier  contenant  l'historique
  461.       des commandes. Cette commande peut être utile si vous changez la
  462.       valeur de la variable "histfile" et que vous voulez  prendre  en
  463.       compte le nouveau fichier.
  464.  
  465.       popd [nb]
  466.       Sans arguments dépile le dernier répertoire empilé et en fait le
  467.       répertoire courant, sinon tronque la pile  des  répertoires  aux
  468.       "nb" premiers répertoires ("popd 0" vide complètement la  pile).
  469.  
  470.       pushd rep
  471.       Empile le répertoire courant, puis fait de "rep"  le  répertoire
  472.       courant.
  473.  
  474.       read [-f] var
  475.       Affecte à la variable locale indiquée une ligne lue sur l'entrée
  476.       standard.  Retourne  RETURN_FAIL  en    cas  de  fin  de  fichier.
  477.       L'option -f permet d'interdire la saisie d'une chaine vide.
  478.  
  479.       readonly vars...
  480.       Empêche toute modification ou destruction des variables (locales
  481.       ou globales) indiquées. Cette opération est irréversible.
  482.  
  483.       set
  484.       Affiche la liste des variables locales, ainsi que leur  valeurs.
  485.  
  486.       set var
  487.       Affiche la valeur de la variable locale "var".
  488.  
  489.       set var val
  490.       Affecte la valeur "val" à la variable locale "var". La  variable
  491.       est créée si elle n'existe pas encore.
  492.  
  493.       setvar
  494.       Affiche la liste des variables globales, ainsi que leur valeurs.
  495.  
  496.       setvar var
  497.       Affiche la valeur de la variable globale "var".
  498.  
  499.       setvar var val
  500.       Affecte la valeur "val" à la variable globale "var". La variable
  501.       est créée si elle n'existe pas encore.
  502.  
  503.       shift
  504.       Décale  les  arguments  d'un   fichier   de   commandes   :   la
  505.       pseudo-variable  "1"  reçoit  le  contenu  de   "2",   puis   la
  506.       pseudo-variable "2" celui de "3", etc... La variable  "argc"  et
  507.       la pseudo-variable "*" sont mises à jour.
  508.  
  509.       source fichier
  510.       Exécute le fichier de commandes indiqué. Si  vous  redirigez    la
  511.       sortie de cette commande, la redirection concernera  toutes  les
  512.       commandes du fichier.
  513.  
  514.       stop [code]
  515.       Interrompt l'exécution de la boucle "for...done" courante,  avec
  516.       le code retour indiqué (0 par défaut).
  517.  
  518.       time <commande>
  519.       Lance l'exécution de la commande indiquée, puis affiche la durée
  520.       (en secondes) d'exécution de cette commande. Peut  être  utilisé
  521.       pour toutes les commandes, y compris les commandes  internes    et
  522.       les commandes lancées en arrière plan.
  523.  
  524.       unalias noms...
  525.       Détruit les alias indiqués.
  526.  
  527.       unset vars...
  528.       Détruit les variables locales indiquées.
  529.  
  530.       writehist
  531.       Force une sauvegarde immédiate de l'historique.  Cette  commande
  532.       peut être utilisée par exemple avant de lancer un programme  qui
  533.       risque de "planter" votre Amiga.
  534.  
  535.   13. Variables spéciales
  536.  
  537.       Les variables suivantes permettent de  contrôler  et    de  paramétrer
  538.   AUSH. Sauf dans le cas où une valeur initiale est indiquée,  elles  ne  sont
  539.   pas définies au démarrage. Il est recommandé de les définir comme  variables
  540.   globales (c'est d'ailleurs ce que fait AUSH pour celles qui ont  une  valeur
  541.   initiale) ou éventuellement comme variables Commodore/ARP.
  542.  
  543.       cmdnum      numéro de commande, de la forme "_ShellNumber_CmdNumber"
  544.           (garanti différent pour chaque commande exécutée).
  545.       cwd      nom du répertoire courant.
  546.       debug      si vaut "1", trace les  commandes  exécutées  (avant  et
  547.           après première interprétation, utile    pour  la  mise    au
  548.           point des fichiers de commandes).
  549.       delim      caractères délimiteurs de mots pour les  fonctions  "mot
  550.           suivant", "mot précédent" et "efface la fin du  mot"  de
  551.           l'éditeur de la ligne de commande.
  552.           Valeur initiale : " :/".
  553.       filepat      chaine ajoutée au mot en cours pour compléter les nom de
  554.           fichiers.
  555.           Valeur initiale : "#?".
  556.       fullhist      si  vaut  "1",  sauvegarde  toutes  les  commandes  dans
  557.           l'historique, sinon ne sauvegarde pas deux fois de suite
  558.           la même commande.
  559.       histfile      nom du fichier de sauvegarde de l'historique entre  deux
  560.           sessions.  Si  cette     variable   n'est   pas   définie,
  561.           l'historique est sauvegardé dans "S:.history".
  562.       histmin      longueur minimale que doit avoir une commande pour  être
  563.           conservée dans l'historique.
  564.           Valeur initiale : 3.
  565.       history      nombre de commandes conservées dans l'historique (si non
  566.           défini ou inférieur à 1, seule la dernière commande  est
  567.           sauvée).
  568.           Valeur initiale : 50.
  569.       insert      si vaut "1", l'édition de la ligne de commande  se  fait
  570.           en mode "insertion" (mode "remplacement" sinon).
  571.           Valeur initiale : 1.
  572.       ioerror      code d'erreur positionné par la dernière commande  ayant
  573.           échoué (pour l'instant ne marche que pour les  commandes
  574.           internes).
  575.           Valeur initiale : 0.
  576.       keys      indique comment  gérer  les  touches    de  contrôle  sous
  577.           l'éditeur de lignes de  commande.  La  valeur  de  cette
  578.           variable doit être une  chaine  de  lettres  minuscules,
  579.           chaque lettre indiquant la touche de    contrôle  appelant
  580.           une des fonctions de l'éditeur. C'est la position de  la
  581.           lettre  dans    la  chaine  qui  détermine   la   fonction
  582.           appelée :
  583.  
  584.               position 1  va en début de ligne
  585.               position 2  caractère précédent
  586.               position 3  liste des compléments
  587.               position 4  va en fin de ligne
  588.               position 5  caractère suivant
  589.               position 6  efface fin de ligne
  590.               position 7  re-affiche la ligne
  591.               position 8  ligne suivante
  592.               position 9  ligne précédente
  593.               position 10 échange deux caractères
  594.               position 11 va au début de l'historique
  595.               position 12 remplace variable
  596.               position 13 efface fin de mot
  597.               position 14 efface ligne
  598.               position 15 va à la fin de l'historique
  599.  
  600.           Par exemple, si la quatrième lettre est un "o",  l'appui
  601.           sur la touche ^o déplacera le curseur en fin    de  ligne.
  602.           Dans la redéfinition des touches à utiliser, veuillez ne
  603.           pas spécifier les touches de contrôle ^h, ^i, ^j, et ^m,
  604.           car ces touches sont gérées spécialement.
  605.           Valeur initiale : "abdefklnpstvwxz".
  606.       language      langue des messages  d'erreurs.  Les  valeurs  reconnues
  607.           sont "english" et "deutsch". Pour toute autre valeur, ou
  608.           si cette variable n'est pas définie, les messages seront
  609.           en français.
  610.       lineedit      si vaut "1", active l'édition de la ligne de commande.
  611.       noexpand      si vaut "1", désactive l'extension des  méta-caractères.
  612.       path      indique le chemin de recherche des commandes à exécuter,
  613.           sous la forme d'une liste de noms de répertoires séparés
  614.           par  un  caractère  ";".  Pour  désigner  le  répertoire
  615.           courant, indiquez "." comme nom  de  répertoire.  Si  un
  616.           fichier  avec  le  bit  "s"  est  trouvé,  une  commande
  617.           "source" est lancée automatiquement sur ce fichier.
  618.           Exemple : setvar path 'ram:;.;c:;sys:utilities'
  619.       prompt      chaine d'invite, interprétée comme suit :
  620.  
  621.               %h      numéro dans l'historique
  622.               %#      numéro du shell
  623.               %i      niveau d'imbrication des "if"
  624.               %l      niveau d'imbrication de boucle
  625.               %c      nom du répertoire courant (variable "cwd")
  626.               %s      dernier code retour (variable "status")
  627.               %Vnom   valeur de la variable "nom".
  628.               %T      heure (HH:MM:SS)
  629.               %d      jour du mois (1-31)
  630.               %D      jour de la semaine (Mon-Sun)
  631.               %m      mois (1-12)
  632.               %M      nom du mois (Jan-Dec)
  633.               %y      année (1900-1999)
  634.               %C      caractère CSI (0x9B)
  635.               %N      caractère retour chariot
  636.               %f      taille de mémoire FAST libre
  637.               %v      taille de mémoire CHIP libre
  638.               %a      taille de mémoire libre (CHIP+FAST)
  639.  
  640.           Valeur initiale : "%C0;33;40m< %# - %c >%C0;31;40m ".
  641.       prompt2      idem que "prompt", mais utilisé entre "if" et "endif".
  642.           Valeur initiale : "%i> ".
  643.       prompt3      idem que "prompt", mais utilisé entre "for" et "done".
  644.           Valeur initiale : "%l) ".
  645.  
  646.       NOTE : en l'absence de définition, "> " est utilisé comme prompt.
  647.  
  648.       savehist      nombre de commandes sauvées entre chaque session (si non
  649.           défini ou inférieur à 1 rien n'est sauvé).
  650.       status      code retour de la dernière commande exécutée.
  651.       titlebar      idem que "prompt", mais pour  le  titre  de  la  fenêtre
  652.           shell.
  653.       trap      commande(s)  à  exécuter  lors  de  l'interruption  d'un
  654.           fichier de commandes ou d'une  boucle  "for...done"  par
  655.           l'appui sur CTRL-C ou CTRL-D. Contrairement  aux  autres
  656.           variables spéciales, il est conseillé de  définir  cette
  657.           variable localement (commande  "set",  permet  à  chaque
  658.           fichier de commandes de la modifier en fonction  de  ses
  659.           besoins). Il    est  également    conseillé  d'indiquer  une
  660.           commande "exit" comme dernière commande (exemple  :  set
  661.           trap 'delete $tmpfile ,  exit  20'),  sinon  l'exécution
  662.           reprendra au point où elle en était  (pour  ignorer  les
  663.           interruptions : set trap ';'). Si cette  variable  n'est
  664.           pas définie, l'exécution est arrêtée avec un code retour
  665.           de 20.
  666.       version      numéro de version de AUSH.
  667.  
  668.   14. Notes
  669.  
  670.       Sauf si vous lui affectez une pile de plus de 4000 octets  AVANT  de
  671.   le lancer, AUSH ne pourra exécuter  plus  d'une  quinzaine  de  fichiers  de
  672.   commandes et/ou de boucles imbriquées (vous obtiendrez le message "pas assez
  673.   de place dans la pile !").
  674.       Si le nom indiqué pour les redirections en sortie  est  "TTY"  (i.e.
  675.   ">TTY" ou ">>TTY"), la redirection se fait vers la fenêtre  du  shell.  Cela
  676.   peut être utile dans un fichier de commandes, pour afficher un message alors
  677.   que la sortie de toutes les commandes a été redirigée vers un fichier.
  678.       Les pipes sont gérés à l'aide de fichiers temporaires créés dans  le
  679.   répertoire "T:", les tentatives  d'utilisation  de  "PIPE:"  et  "FIFO:"  se
  680.   soldant pour l'instant par un Gourou dès que plus  de  deux  commandes  sont
  681.   enchainées. Le répertoire  "T:"  est  également  utilisé  pour  stocker  des
  682.   fichiers temporaires lors des substitutions de commandes et  de  l'exécution
  683.   des boucles "for...done".
  684.       La forme "cmd  &"  correspond  à  la  forme  "run  cmd"  des  shells
  685.   Commodore et ARP. Notez que AUSH attend  la  fin  de    toutes    les  commandes
  686.   lancées en arrière plan avant de terminer. La commande "jobs" vous permettra
  687.   de savoir quelles sont ces commandes.
  688.       Sous système 2.04, AUSH n'est  pas  capable  de  récupérer  le  code
  689.   retour d'une commande lancée en arrière plan.
  690.  
  691.   15. Historique
  692.  
  693.     v1.00   28-Feb-92, 29564 octets
  694.         o Première version diffusée.
  695.  
  696.     v1.10   28-Mar-92, 31828 octets
  697.         o Cherche les variables également dans les variables ARP/Commodore
  698.           et Manx.
  699.         o La touche "^D" affiche les possibilités pour compléter le nom de
  700.           fichier ou de variable, les touches "^B",  "^F",  "^N"  et  "^P"
  701.           font la même chose que "gauche", "droite", "bas" et "haut".
  702.         o L'éditeur de ligne de commande efface le curseur  pendant  qu'il
  703.           exécute une commande (affichage plus rapide).
  704.         o La requête de fichier récupère le mot en cours pour  initialiser
  705.           le répertoire initial de la requête.
  706.         o Remet à zéro les signaux SIGBREAKF en  retour  de  l'éditeur  de
  707.           ligne de commandes (car ils sont positionnés si on  utilise  ^D,
  708.           ^E, ou ^F).
  709.         o Les  formes  "!!",  "!n"  et  "!chaine"  peuvent  être  indiquée
  710.           n'importe où sur la ligne de commande.
  711.         o Ajout des formes -D, -E, et -F à la commande "if".
  712.         o Ajout de la forme "for var in val1 ..  val2"  pour  la  commande
  713.           "for...done".
  714.         o Ajout de l'alias "dircmd".
  715.         o Ajoute un espace après une définition d'alias sans arguments (si
  716.           on faisait "alias ls dir" puis "ls ram:"  on  avait  un  message
  717.           "Please insert volume dirram: in any drive").
  718.         o Messages d'erreur en allemand si  la  variable  "language"  vaut
  719.           "deutsch".
  720.         o Commande "setenv" renommée en "setvar" (plus de conflits avec la
  721.           commande de Commodore), ajout de la commande "echo".
  722.         o Ajout des variables  "version"  et  "path",  variable  "ioerror"
  723.           initialisée à "0", variable "insert" initialisée à "1", variable
  724.           "autocd" supprimée.
  725.  
  726.     v1.11   29-Mar-92, 31832 octets
  727.         o La commande "echo" tient compte des redirections en sorties
  728.  
  729.     v1.12   11-Apr-92, 32244 octets
  730.         o Charge l'historique après l'exécution de  "S:.aushrc",  afin  de
  731.           prendre en compte une éventuelle modification de la valeur de la
  732.           variable "history".
  733.         o Ajout des formes "NE", "LE", et "GE" à la commande "if".
  734.         o La forme "for i in val1 .. val2" accepte des nombres négatifs et
  735.           que "val2" soit inférieur à "val1".
  736.         o Plus de contrôle de la taille des arguments pour    les  commandes
  737.           internes.
  738.         o Ajout de la fonction "^V" à l'éditeur de ligne de commandes.
  739.  
  740.     v1.13   18-Apr-92, 32280 octets
  741.         o Lors de la recherche d'une commande  à  l'aide  de  la  variable
  742.           "path" vérifie que l'objet trouvé est bien un fichier (et non un
  743.           répertoire).
  744.  
  745.     v1.14   26-Apr-92, 32300 octets
  746.         o Deux erreurs  corrigées  dans  la  substitution  de  commande  :
  747.           n'éliminait  pas  le  "`"  final,  calcul  de  la  longueur  des
  748.           arguments incorrect.
  749.         o Une erreur corrigée dans le parser : interprétait quand même les
  750.           caractères "<>,;" s'ils étaient en première  position  dans  une
  751.           chaine entre quotes.
  752.         o Messages en allemands revus
  753.  
  754.     v1.15   01-May-92, 32364 octets
  755.         o Ajout de la variable "histfile".
  756.         o Deux erreurs  corrigées  dans  le  calcul  de  la  longueur  des
  757.           arguments : oubliait de compter les guillements ou  les  quotes,
  758.           et de prévoir un peu de place supplémentaire pour les  arguments
  759.           "splités".
  760.  
  761.     v1.16   11-May-92, 32404 octets
  762.         o commande "echo" revue  :  quand  on  met  l'option  -c  supprime
  763.           vraiment le '\n' final (i.e. ne le remplace pas par un espace)
  764.  
  765.     v1.20   16-May-92, 32568 octets
  766.         o ajout des commandes "loadhist" et "writehist"
  767.         o ajout de la forme "%Vnom" à la syntaxe du prompt
  768.         o modification du "parser" :  n'analyse  la  partie  droite  d'une
  769.           commande composée qu'après avoir exécuté la  partie  gauche,  et
  770.           donc :
  771.           - "cd ram: , delete *" donne  le  résultat  attendu  ("*"  était
  772.         étendu avant de faire le "cd")
  773.           - toutes les commandes simples peuvent être des  alias  (et  non
  774.         plus seulement la première)
  775.           - on peut écrire une boucle sur une seule ligne ("for i in 1  ..
  776.         50 , echo $i , done" ne  marchait  pas,  maintenant  même  "cd
  777.         ram: , for i in *.c , echo $i , compress  $i  ,  done  ,  echo
  778.         fini" fonctionne !)
  779.  
  780.     v1.21   17-May-92, 32912 octets
  781.         o ajout de la commande "time"
  782.  
  783.     v1.22   23-May-92, 32944 octets
  784.         o bug corrigé dans la gestion des boucles "for...done" :  lors  de
  785.           l'écriture des commandes dans le fichier temporaire, ne  forçait
  786.           pas une fin de ligne après chaque commande
  787.  
  788.     v1.23   01-Jun-92, 33328 octets
  789.         o Plusieurs bugs corrigés dans la gestion des boucles "for...done"
  790.           écrites sur une même ligne : "for i  in  1  ..  5,echo  $i,done"
  791.           marche, ainsi que "for i in 1 .. 5 , list | wc , done"
  792.         o Si trouve un fichier avec le bit "s" en cherchant  une  commande
  793.           dans  le    chemin    défini     par   la   variable   "path",   lance
  794.           automatiquement une commande "source" sur ce fichier.
  795.         o La touche "^S" échange les deux caractères précédant le curseur.
  796.         o Les touches "^D" et "<TAB>" sont utilisables  sans  préfixe,  et
  797.           donc en début de ligne ou après un espace.
  798.         o Bug corrigé dans    l'éditeur  de  ligne  de  commande:  après  un
  799.           "shift-haut", les touches "haut" et "bas" ne donnaient  pas  les
  800.           bonnes commandes.
  801.  
  802.     v1.30   14-Jun-92, 33932 octets
  803.         o Plusieurs  erreurs  détectées  par  "Enforcer"   et   "Mungwall"
  804.           corrigées.
  805.         o Bug corrigé dans la  commande  "shift"  :  ne  positionnait  pas
  806.           "argc" correctement.
  807.         o Reconnait "$*" (remplacé par la liste des arguments séparés  par
  808.           un espace).
  809.         o Ajout de l'option -f à la commande "read".
  810.         o La variable "argc" est en lecture seulement.
  811.         o Vérifie les noms de  variables  donnés  aux  commandes  internes
  812.           (interdit les pseudo-variables arguments).
  813.         o Les spécifications "&[pri]" et  "@pri"  peuvent  être  indiquées
  814.           n'importe où sur la ligne de commande.
  815.  
  816.     v1.40   26-Jun-92, 37764 octets
  817.         o Recompilé avec le SAS/C 5.10b (avec pragmas et optimisation)
  818.         o Peut être rendu résident (code "pure")
  819.         o Enorme bug corrigé dans la fonction strxcat()  (ne  sauvegardait
  820.           pas le registre a2)
  821.         o Nombreuses modifications pour mieux tenir compte de  la  version
  822.           du système, ainsi sous système 2.04 :
  823.         - n'a plus besoin de "arp.library"
  824.         - peut exécuter les programmes résidents/internes (ROM)
  825.         - la commande "Execute" peut être utilisée
  826.         o Modification de l'évaluateur d'expressions :
  827.           - on peut indiquer des valeurs en hexa (0x1FD)
  828.           - ajout des opérateurs "HEX", "<", ">", "&", et "|"
  829.         o Ajout de l'option "-o" à la commande "if"
  830.         o Bug corrigé dans la  commande  "if":  n'appelait  UnLock()  dans
  831.           certains cas d'erreur
  832.  
  833.     v1.41   30-Jun-92, 37864 octets
  834.         o Correction dans la recherche des commandes: ne cherche  plus  le
  835.           chemin si la commande est résidente
  836.  
  837.     v1.42   06-Jul-92, 37872 octets
  838.         o Bug corrigé dans la gestion des boucles "for...done": "oubliait"
  839.           les redirections des commandes dans la boucle
  840.         o Ne fait plus  crier  "Enforcer"  quand  on  fait  "!string"  (ou
  841.           "shift-haut" dans l'éditeur de lignes de commandes) et qu'aucune
  842.           commande commençant par "string" ne se trouve dans  l'historique
  843.  
  844.     v1.50   21-Aug-92, 37736 octets
  845.         o Ajout de la variable globale  "keys"  (permet  de  modifier  les
  846.           fonctions des touches de contrôle sous l'éditeur  de  lignes  de
  847.           commande)
  848.         o Accepte l'argument "FROM file"
  849.         o Contrôles plus stricts au démarrage: proc->pr_CLI valide, pas de
  850.           lancement depuis le WB, etc...
  851.         o Bug corrigé dans    l'évaluation  des  expressions:  affichait  le
  852.           résultat en décimal même si on indiquait "HEX"
  853.         o Bug corrigé sous système 1.3: ne donnait pas le  chemin  complet
  854.           de la commande à la fonction qui lance l'exécution
  855.  
  856.  
  857.  
  858.  
  859.